package part02_单例模式;

/**饿汉式（静态常量）
 * 1-构造器私有化（防止new
 * 2-类的内部创建对象
 * 3-向外暴露一个静态的公共方法--getInstance
 *
 * @ClassName: SingletonTest01
 * @Author: AllenSun
 * @Date: 2019/12/4 21:28
 */
public class SingletonTest01 {
    public static void main(String[] args) {
        //不是通过new来创建对象，而是通过getInstance来获取一个现成的对象
        //优点：避免了线程同步问题
        //缺点：类装载时就完成实例化，没有达成懒加载，会造成内存的浪费
        Singleton01 instance01=Singleton01.getInstance();
        Singleton01 instance02=Singleton01.getInstance();
        System.out.println(instance01==instance02);//true
        System.out.println("instance01hashCode="+instance01.hashCode());//93122545
        System.out.println("instance02hashCode="+instance02.hashCode());//93122545
    }
}

//类
class Singleton01{
    //1-构造器私有化，外部不能new，只能在内部用
    private Singleton01(){}
    //2-本类内部创建对象实例（构造器不能用，那我自己内部new一个对象，给外界调用）
    private final static Singleton01 instance=new Singleton01();
    //3-提供一个公有的静态方法，返回实例对象
    public static Singleton01 getInstance(){
        return instance;
    }
}
